class FacturaController < ApplicationController

  def index
    list
    render :action => 'list'
  end

  def list
    @facturas = Factura.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :order => 'fecha_factura DESC'

  end

  def new
    @factura = Factura.new(:referencia => nil,
      :ejecutivo_id => params[:e],
      :centro_id => params[:c])
    1.times { @factura.detalle_facturas << DetalleFactura.new }

    populate_collections(params[:e])

  end

  def show
    @factura = Factura.find(params[:id])

  end

  def create
    @factura = Factura.new(params[:factura])
    @factura.referencia.upcase!
    @factura.user_id = session[:user]

    if @factura.save
      
      flash[:notice] = "La Factura se creo correctamente."
      
      if params[:commit].eql?("Otra Factura")
        redirect_to :action => 'new', :e => @factura.ejecutivo_id, :c => @factura.centro_id
      else
        redirect_to :action => 'index'
      end
    else
      @factura.detalle_facturas.delete_if { |d| d.unidades.blank? && d.producto_id.blank? }
      @factura.valid?

      populate_collections
      render :action => 'new'
    end

  end

  def on_clave
    unless params[:clave].blank?
      logger.debug "Recibido: #{params[:clave]}"
      @producto = Producto.find_by_clave(params[:clave])
      @productos = Producto.find(:all)
      
      if !@producto.nil?
        logger.debug "Producto #{@producto.descripcion}, clave: #{@producto.clave}, id #{@producto.id}"
        
        render :update do |page|
          page.replace :productos, '<select id=id="factura[detalle_attributes]__producto_id" name="factura[detalle_attributes][][producto_id]">' + options_from_collection_for_select(@productos, :id, :descripcion, @producto.id) + '</select>'
        end
      else
        logger.debug "Producto inexistente"
        render :text => "Producto inexistente"
      end
    else
      
    end
    
  end
  
  def search
    unless params[:search].blank?
      conditions = ["concatenado LIKE ?", "%#{params[:search]}%"] unless params[:search].nil?
      
      @facturas = BusquedaFactura.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE,
        :order => 'fecha_factura DESC', :conditions => conditions
    else
      list
    end

    render :action => 'search'    
  end
  
  def edit
    @factura = Factura.find(params[:id])
    populate_collections
    
  end
  
  def update
    @factura = Factura.find(params[:id])
    @factura.user_id = session[:user]
    
    if @factura.update_attributes(params[:factura])
      flash[:notice] = "La factura se actualizo correctamente"
      redirect_to :action => 'show', :id => @factura
    else
      populate_collections
      render :action => 'edit'
    end
  end
  
  def populate_collections(ejecutivo_id=nil)
    @mayoristas = Mayorista.find(:all, :conditions => {:status_id => 1}, :order => 'nombre')
    @productos = Producto.find(:all, :order => 'descripcion', :conditions => {:status_id => 1})
    @last_year = Time.now.years_ago(1).year
    @this_year = Time.now.year
    
    logger.debug "ejecutivo_id = #{ejecutivo_id}"
    if ejecutivo_id.nil?
      @centros = Centro.find(:all, :order => 'nombre_comercial')
    else
      @centros = Centro.find(:all, :conditions => {:ejecutivo_id => ejecutivo_id}, :order => 'nombre_comercial')
    end
    
    conditions = {}
    conditions[:puesto_id] = Catalogo.valor_id('Puestos Ejecutivos', 'Ejecutivo CDC')
    conditions[:status_id] = 1
    @ejecutivos = Ejecutivo.find(:all, :conditions => conditions, :order => 'nombre, primer_apellido')
    
  end
  
  def on_ejecutivo_changed
    unless params[:id].blank?
      logger.debug 'Ejecutivo changed ' + params[:id]
      
      ejecutivo = Ejecutivo.find(params[:id])

      conditions = {}
      conditions[:ejecutivo_id] = ejecutivo.id
      
      @coleccion = Centro.find(:all, :conditions => conditions)
    else
      @coleccion = []
    end

    render :partial => "centro", :locals => { :coleccion => @coleccion }
    
  end
end
